import { reqGoodsInfo,reqAddOrUpdateShopCart } from "@/api"
// 封装游客身份模块uuid————>生成一个随机字符串(不能再变了)
import {getUUID} from '@/utils/uuid_token'
const state = {
  goodsInfo:{},
  // 游客临时身份
  uuid_token:getUUID()
}
const mutations = {
  GETGOODSINFO(state,goodsInfo){
    state.goodsInfo = goodsInfo;
  },
}
const actions = {
  // 获取产品信息的action
  async getGoodsInfo({commit},skuId){
    let result = await reqGoodsInfo(skuId)
    if(result.code==200){
      commit("GETGOODSINFO",result.data);
    }
  },
  // 获取添加购物车信息的action
  async addOrUpdateShopCart({commit},{skuId,skuNum}){
    // 加入购物车以后(发请求)，前台参数带给服务器
    // 服务器写入数据成功，并没有返回其他的数据，只是返回code=200，代表这次操作成功
    // 因为服务器没有返回其余数据，因此不需要三连环存储数据
    // async函数执行返回的结果一定是一个promise【要么成功要么失败】
    let result = await reqAddOrUpdateShopCart(skuId,skuNum);
    // 代表服务器加入购物车成功
    if(result.code == 200){
      return "ok"
    }else{
      // 代表加入购物车失败
      return Promise.reject(new Error('faile'))
    }
  }
}
// getter是为了简化数据而生
const getters = {
  // 路径导航简化的数据
  categoryView(state){
    // 当前计算出的属性值至少是一个空对象，这样就不会出现假报错现象
    return state.goodsInfo.categoryView || {}
  },
  // 简化产品信息数据
  skuInfo(state){
    return state.goodsInfo.skuInfo || {}
  },
  // 产品售卖属性的简化
  spuSaleAttrList(state){
    return state.goodsInfo.spuSaleAttrList || []
  }
}
export default{
  state,
  mutations,
  actions,
  getters
}